Query processing has been optimized for disk-based systems, because these systems can hold very large tables on which the processing operates. A common operation in query processing is a join operation on very large tables. Such a join operation may incur many I/O operations to the disk system, reducing performance. An alternative to disk-based systems is a cluster of computing nodes, each of which has a processor, a modest amount of memory, and non-persistent storage for storing table data accessed by query processing, and each of which are connected together through a network. A cluster of computing nodes, however, can have a very large number, in fact, thousands of nodes. The aggregate memory and processing power of the large number of nodes provides the benefits of cluster over disk based systems.
However, since the computing nodes of a cluster have relatively small memory compared to the disk storage of disk based systems, each node may not be able to store all the database objects required for a join operation in a query. Thus, to complete a join operation, data may need to be shuffled back and forth from one node to another. Such transport of data across the network of the cluster adds transmission latency to query processing and may make the cost of accomplishing the join operation higher than on a disk-based system. To obtain the most performance from a cluster, a mechanism is needed to optimally place data from database objects on cluster nodes to minimize the effects of network latency for query processing of operations, such as joins.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.